package schema

import (
	"errors"
)

// ResourceReserved 资源申请数据库模型
type ResourceReserved struct {
	ID                  int64            `bson:"_id"`                  //	唯一标识(自增ID)
	RecordID            string           `bson:"record_id"`            //	记录内码(uuid)
	ResourceID          string           `bson:"resource_id"`          //	资源的record_id
	HoursReserved       map[string][]int `bson:"hours_reserved"`       //	申请的时间段，map:key->"2018/11/20"value->[0,0,0,0,1,0,1,1,...]
	ApplicantName       string           `bson:"applicant_name"`       //	申请人名字
	ApplicantTel        string           `bson:"applicant_tel"`        //	申请人电话
	ApplicantEnterprise string           `bson:"applicant_enterprise"` //	申请人企业名称
	MemoUsed            string           `bson:"memo_used"`            //	申请使用描述
	Note                string           `bson:"note"`                 //	申请使用备注事项
	Price               int              `bson:"price"`                //	资源价格
	TotalCost           int              `bson:"total_cost"`           //	全部费用
	ApplicationStatus   int              `bson:"application_status"`   //	审批状态 0->未审批1->申请通过2->未通过3->申请人取消预约资源
	Comment             string           `bson:"comment"`              //	审批/取消 理由描述
	TimeHandled         int64            `bson:"time_handled"`         //	处理时间
	Status              int              `bson:"status"`               //	状态(1:正常 2:异常)
	Creator             string           `bson:"creator"`              //	创建人
	Created             int64            `bson:"created"`              //	创建时间戳
	Deleted             int64            `bson:"deleted"`              //	删除时间戳
}

// ResourceReservedCParams 资源申请参数
type ResourceReservedCParams struct {
	ResourceID          string           `json:"resource_id"`          //	资源的record_id
	HoursReserved       map[string][]int `json:"hours_reserved"`       //	申请的时间段，map:key->"2018/11/20"value->["1","2","3",...]
	ApplicantName       string           `json:"applicant_name"`       //	申请人名字
	ApplicantTel        string           `json:"applicant_tel"`        //	申请人电话
	ApplicantEnterprise string           `json:"applicant_enterprise"` //	申请人企业名称
	MemoUsed            string           `json:"memo_used"`            //	使用描述
	Note                string           `json:"note"`                 //	申请使用备注事项
	Price               int              `json:"price"`                //	资源价格，单位：分/小时
	TotalCost           int              `json:"total_cost"`           //	全部费用
}

// Validate 校验方法
func (a *ResourceReservedCParams) Validate() error {
	if a.ResourceID == "" {
		return errors.New("资源的record_id不能为空")
	}
	if len(a.HoursReserved) == 0 {
		return errors.New("预定时间不能为空")
	}
	for key, value := range a.HoursReserved {
		if len(key) != 10 || len(value) == 0 {
			return errors.New("hours_reserved参数内部错误")
		}
	}
	if a.Price == 0 || a.TotalCost == 0 {
		return errors.New("价格或者总价不能为空")
	}
	if a.ApplicantName == "" || a.ApplicantTel == "" || a.ApplicantEnterprise == "" {
		return errors.New("申请人、电话、申请企业不能为空")
	}
	return nil
}

// ResourceReservedUParams 资源申请处理参数(同意申请、驳回申请、取消申请)
type ResourceReservedUParams struct {
	Comment    string `json:"comment"`     //	同意申请、驳回申请、取消申请 的理由或批注
	RecordID   string `json:"record_id"`   //	预定订单的record_id
	UpdateType int    `json:"update_type"` //	更新的类型:1->同意申请2->驳回申请3->申请人取消申请
}

// Validate 校验方法
func (a *ResourceReservedUParams) Validate() error {
	if a.RecordID == "" {
		return errors.New("record_id不能为空")
	}
	t := a.UpdateType
	if t != 1 && t != 2 && t != 3 {
		return errors.New("update_type参数错误")
	}
	return nil
}

// ResourceReservedQParams 查询参数
type ResourceReservedQParams struct {
	UserID            string
	PageIndex         uint
	PageSize          uint
	ApplicationStatus int
}
